package array

// IndexOf 返回首次 value 在数组array中被找到的 索引值, 如果 fromIndex 为负值，将从数组array尾端索引进行匹配。
func IndexOf (array []T, value T, fromIndex ...int) int {
	startIndex := 0
	if len(fromIndex) > 0 {
		startIndex = fromIndex[0]
	}
	var fromRight bool
	if startIndex < 0 {
		fromRight = true
		startIndex = len(array) + startIndex
		if startIndex < 0 {
			startIndex = 0
		}
	}
	if !fromRight {
		for i := startIndex; i < len(array); i++ {
			if array[i] == value {
				return i
			}
		}
	} else {
		for i := startIndex; i >= 0; i-- {
			if array[i] == value {
				return i
			}
		}
	}
	return -1
}
